/**
 * 
 * 列表转树结构
 * 
 * 
*/

// 适用于只有两级的菜单
export function first(array) {
    let parentList = array.filter(item => item.parentId == null);
    let sonList = array.filter(item => item.parentId);
    sonList.forEach(item => {
        let parent = parentList.find(it => it.id == item.parentId);
        if (parent) {
            if (parent.children && parent.children.length > 0) {
                parent.children.push(item)
            } else {
                parent.children = [];
                parent.children.push(item)
            }
        }
    });
    return parentList;
}

export function second(array) {
    let parentList = arr.filter(item => !item.parentId);
    let sonList = arr.filter(item => item.parentId);
    sonList.forEach(it => {
        parentList.forEach(item => {
            // 通过parentId找到,父的对象
            let childList = sonList.filter(c => c.parentId == item.id);
            item.children = childList;
        });
    });
    console.log("最后结果", parentList);
    return parentList;
}


// 适用于多级菜单
export function translateDataToTree(array) {
    //没有父节点的数据
    let parents = array.filter(value => value.parentId == "undefined" || value.parentId == null);

    //有父节点的数据
    let children = array.filter(value => value.parentId !== "undefined" && value.parentId != null);

    //定义转换方法的具体实现
    let translator = (parents, children) => {
        //遍历父节点数据
        parents.forEach(parent => {
            //遍历子节点数据
            children.forEach((current, index) => {
                //此时找到父节点对应的一个子节点
                // 看到没有，他只处理找到的，找不到的不管，就是这个判断
                if (current.parentId === parent.id) {
                    //对子节点数据进行深复制，这里只支持部分类型的数据深复制，对深复制不了解的童靴可以先去了解下深复制
                    let temp = JSON.parse(JSON.stringify(children));
                    //让当前子节点从temp中移除，temp作为新的子节点数据，这里是为了让递归时，子节点的遍历次数更少，如果父子关系的层级越多，越有利
                    temp.splice(index, 1);
                    //让当前子节点作为唯一的父节点，去递归查找其对应的子节点
                    translator([current], temp);
                    //把找到子节点放入父节点的children属性中
                    typeof parent.children !== "undefined" ? parent.children.push(current) : (parent.children = [current]);
                }
            });
        });
    };
    //调用转换方法
    translator(parents, children);
    console.log("------", parents);
    //返回最终的结果
    return parents;
}
